// 连接数据库
const db = require('../db/index');
// 导入bcryptjs包进行加密
const bcrypt = require('bcryptjs');
// 导入jsonwebtoken
const jwt = require('jsonwebtoken');
// 导入config配置密钥
const config = require('../config');

// 注册
exports.reguser = (req, res) => {
    // 设置允许跨域的相关头部信息，允许所有源访问，允许所有请求头
    res.setHeader('Access-control-Allow-Origin', '*');
    res.setHeader('Access-control-Allow-Headers', '*');

    // 查询用户名是否被占用
    const sql = 'select * from user where username=?';
    db.query(sql, [req.body.username], (err, results) => {
        if (err) return res.send(err);
        // 验证用户名和密码是否都有输入
        if (!req.body.username ||!req.body.password) return res.send('username与password不能为空');
        // 如果查询到该用户名已存在，则返回注册失败信息
        if (results.length > 0) return res.send('用户名已被占用,注册失败');

        // 给密码加密，使用bcryptjs对密码进行哈希处理
        req.body.password = bcrypt.hashSync(req.body.password);

        // 执行注册操作，将用户名和加密后的密码插入到数据库表中
        const sql = 'insert into user set?';
        db.query(sql, [{ username: req.body.username, password: req.body.password }], (err, results) => {
            if (err) return res.send(err);
            // 根据受影响的行数判断注册是否成功，若不是1行受影响则表示注册失败
            if (results.affectedRows!== 1) return res.send('注册失败,请重新注册');

            res.send('注册成功');
        });
    });
};

// 登录
exports.login = (req, res) => {
    // 设置允许跨域的相关头部信息，允许所有源访问，允许所有请求头
    res.setHeader('Access-control-Allow-Origin', '*');
    res.setHeader('Access-control-Allow-Headers', '*');

    console.log(req.query);

    const sql = 'select * from user where username=?';
    db.query(sql, req.query.username, (err, results) => {
        if (err) return res.send(err);
        // 提取查询结果中的用户信息，去除密码等敏感字段（这里将密码字段置空等处理）
        const user = {...results[0], password: '', user_pic: '' };
        console.log("user:", user);
        // 如果查询结果长度不为1，说明没有找到对应的用户名，返回提示让用户先注册
        if (results.length!== 1) return res.send('没有该用户名,请先注册！');

        // 对比输入的密码和数据库中存储的加密后的密码是否一致
        const compareResult = bcrypt.compareSync(req.query.password, results[0].password);
        if (!compareResult) return res.send('密码错误,登录失败');

        // 使用jsonwebtoken生成一个令牌（Token），包含用户信息，设置过期时间为10小时
        const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '10h' });

        // 登录成功后重定向到 main.html 页面，确保这里的路由 '/main' 在 app.js 中有对应的处理
        res.redirect('/main');
    });
};